Spusteni externiho exe z aplikace v Delphi
Otázka od: Jiri Brothanek
12. 12. 2002 9:46
Ahoj,
omlouvam se za zacatecnicky dotaz.
Potrebuji spustit z aplikace napsane v D5 jine exe - konzolovou aplikaci.
Takze v podstate v programu spustit neco jako :
program.exe -parametr1 -parametr2
Aby to nebylo tak jednoduche, tak bych potreboval nejak zachytit vystup,
ktery program.exe vypisuje na konzolu. Formulace :
program.exe -parametr1 -parametr2 >vystup.txt
nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.
Ve starem Turbo Pascalu bych to resil prikazem EXEC z unity DOS, ale to v
Delphi neni a nic podobneho nemohu najit.
Za kazdy podnet, pripominku, dekuji.
Jirka.
Odpovedá: ing. Jan Fiala
12. 12. 2002 9:50
V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim
vystupu.
Nekde jsem videl unitu DosCommand, ktera toto resila, vcetne cekani na
ukonceni, moznosti i vkladat text do konzole a odpovidat tak na dotazy
programu.
Zkus se podivat na klasickych www.torry.net apod.
--
ing. Jan Fiala
mailto:jan.fiala@iol.cz
12.12.2002 Jiri Brothanek:
> Ahoj,
> omlouvam se za zacatecnicky dotaz.
> Potrebuji spustit z aplikace napsane v D5 jine exe - konzolovou aplikaci.
> Takze v podstate v programu spustit neco jako :
> program.exe -parametr1 -parametr2
> Aby to nebylo tak jednoduche, tak bych potreboval nejak zachytit vystup,
> ktery program.exe vypisuje na konzolu. Formulace :
> program.exe -parametr1 -parametr2 >vystup.txt
> nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.
> Ve starem Turbo Pascalu bych to resil prikazem EXEC z unity DOS, ale to v
> Delphi neni a nic podobneho nemohu najit.
> Za kazdy podnet, pripominku, dekuji.
> Jirka.
Odpovedá: Ondrej Kelle
12. 12. 2002 10:45
> Potrebuji spustit z aplikace napsane v D5 jine exe -
> konzolovou aplikaci. Takze v podstate v programu
> spustit neco jako :
>
> program.exe -parametr1 -parametr2
>
> Aby to nebylo tak jednoduche, tak bych potreboval nejak
> zachytit vystup, ktery program.exe vypisuje na konzolu.
Jeden priklad najdes tu:
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=14692
Hladal som len zbezne, mozno je podobnych prikladov na CC aj viac.
> program.exe -parametr1 -parametr2 >vystup.txt
>
> nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.
Obavam sa, ze ak toto nefunguje, potom dana konzolova aplikacia nepouziva
stdout. Na vypis moze pouzit aj stderr alebo priamy zapis do screen buffrov.
V tom pripade bude odchytavanie toho vystupu asi problematicke.
HTH
TOndrej
Odpovedá: Jiri Brothanek
12. 12. 2002 17:03
Ondrej Kelle wrote:
> Jeden priklad najdes tu:
>
> http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=14692
Diky za priklad, je zde rozveden CreateProcess a externi exe spustim.
> ... dana konzolova aplikacia nepouziva
> stdout. Na vypis moze pouzit aj stderr alebo priamy zapis do screen
buffrov.
> V tom pripade bude odchytavanie toho vystupu asi problematicke.
To opravdu nejde.
Nevi nekdo, jak to zachytit ?
Jirka
Odpovedá: Jiri Brothanek
12. 12. 2002 17:37
ing. Jan Fiala wrote :
> V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim
Diky, z dokumentace jsem pochopil, ze CreateProcess vyuziva WinExec a
spousteni aplikace jsem rozchodil.
Pokud pouziji program, ktery vypisuje standardne do okna, tak vystup
zachytim. Program, ktery ale v DOS okne nezabere na :
program.exe >vystup.txt
mi ale zachytit nejde.
Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to je
znemozneno.
Jirka
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>
> V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim
> vystupu.
> Nekde jsem videl unitu DosCommand, ktera toto resila, vcetne cekani na
> ukonceni, moznosti i vkladat text do konzole a odpovidat tak na dotazy
> programu.
> Zkus se podivat na klasickych www.torry.net apod.
>
> --
> ing. Jan Fiala
Odpovedá: Dalibor Toman
12. 12. 2002 17:51
> ing. Jan Fiala wrote :
>
> > V Delphi je prikaz WinExec, ale to neresi tvuj problem se
zachycenim
>
> Diky, z dokumentace jsem pochopil, ze CreateProcess vyuziva WinExec
a
> spousteni aplikace jsem rozchodil.
> Pokud pouziji program, ktery vypisuje standardne do okna, tak vystup
> zachytim. Program, ktery ale v DOS okne nezabere na :
>
> program.exe >vystup.txt
>
> mi ale zachytit nejde.
>
> Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz
pise
> jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze
to je
> znemozneno.
>
Pokud aplikace primo pise do videopameti pak muzes zkusit
CreateConsoleScreenBuffe
ReadConsoleOutput
atd. Vice viz msdn.microsoft.com
D. Toman
Odpovedá: ing. Jan Fiala
12. 12. 2002 19:38
12.12.2002 Jiri Brothanek:
program.exe >vystup.txt
> mi ale zachytit nejde.
> Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
> jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to je
> znemozneno.
Zkousel jsi najit tu komponentu DosCommand ?
Dal jsem ji na http://www.volny.cz/jan.fiala
Uspesne ji pouzivam v PSpadu a bez problemu zachyti i vystup
obrazovky, ktery pomoci presmerovani zachytit nejde
--
Jan Fiala
mailto:jan.fiala@iol.cz
Odpovedá: Jiri Brothanek
12. 12. 2002 20:07
ing. Jan Fiala wrote :
> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala
Diky, ted jsem si ji ztahl z www.torry.net DosCommand 2.0 a zitra to
odzkousim. Na tvuj web se podivam.
Jiri Brothanek
----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>
Sent: Thursday, December 12, 2002 7:13 PM
Subject: Re: Spusteni externiho exe z aplikace v Delphi
> 12.12.2002 Jiri Brothanek:
> program.exe >vystup.txt
>
> > mi ale zachytit nejde.
>
> > Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
> > jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to
je
> > znemozneno.
>
> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala
>
> Uspesne ji pouzivam v PSpadu a bez problemu zachyti i vystup
> obrazovky, ktery pomoci presmerovani zachytit nejde
>
> --
> Jan Fiala
> mailto:jan.fiala@iol.cz
>
>
Odpovedá: Jiri Brothanek
13. 12. 2002 20:44
ing. Jan Fiala wrote :
> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala
Diky za komponentu. Vystup mi to ale nedela c:\out.txt ma delku 0. Jedu to
pod Win2000.
Nemohu prijit na to, co delam spatne.
Jiri Brothanek jiri.brothanek@seznam.cz
Cast vypisu :
procedure TForm1.Button1Click(Sender: TObject);
var
sl :TStringList;
begin
DosCommand1.CommandLine := 'c:\my.bat';
DosCommand1.Execute;
sl := DosCommand1.Lines;
sl.SaveToFile('c:\out.txt');
sl.Free;
end;
Obsah c:\my.bat :
@echo off
echo 1
echo 2
echo 3
echo 4
Odpovedá: Jiri Brothanek
14. 12. 2002 0:06
ing. Jan Fiala wrote :
> Zkousel jsi najit tu komponentu DosCommand ?
Opravuji svuj minuly mail (nesmyslne pouziti TStringList).
Problem mam uz tady :
procedure TForm1.Button1Click(Sender: TObject);
begin
DosCommand1.CommandLine := 'c:\my.bat';
DosCommand1.Execute;
end;
Vyvola vzdy OnError.
Jiri Brothanek
Odpovedá: ing. Jan Fiala
14. 12. 2002 10:32
13.12.2002 Jiri Brothanek:
> Opravuji svuj minuly mail (nesmyslne pouziti TStringList).
> Problem mam uz tady :
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> DosCommand1.CommandLine := 'c:\my.bat';
> DosCommand1.Execute;
> end;
> Vyvola vzdy OnError.
A co ti k tomu mam rict, kdyz nevim, co mas v te davce ?
Mas v ni prikazy i s cestou ?
Pokud to spoustit ze sveho programu, jsi nastaveny nekde. A kdyz mas v
davce prime spusteni neceho bez cesty...
V havicce unity mas priklady.
Zkus vyzkouset tohle:
s := 'C:\My.BAT';
DosComm.CurDir := ExtractFilePath(s);
DosComm.CommandLine := s;
DosComm.Execute;
Cteni vystupu na obrazovku se provadi v udalosti DosComm.OnNewLine,
takze by tam nemelo byt zadne presmerovani >neco.txt
--
Jan Fiala
mailto:jan.fiala@iol.cz
Odpovedá: Jiri Brothanek
14. 12. 2002 17:02
ing. Jan Fiala wrote :
> Zkus vyzkouset tohle:
>
> s := 'C:\My.BAT';
> DosComm.CurDir := ExtractFilePath(s);
> DosComm.CommandLine := s;
> DosComm.Execute;
Uz mi to jede. Nenastavoval jsem DosComm.CurDir . Chybne jsem predpokladal,
ze to dela za mne. Diky za radu a celkove za pomoc. Nic z toho, co jsem si
stahl, mi ten vystup nezachytilo jenom DosCommand.
Ta komponenta je fakt skvela.
Jiri Brothanek
jiri.brothanek@seznam.cz
Odpovedá: miro mrazik
14. 12. 2002 18:35
Ahoj mam konzolovu aplikaciu, ktoru ked spustim tak sa mi zobrazi dosovske
okno a v nom bezia percenta. Bolo by mozne pomocou tejto komponenty
zachytiti aj vypisovanie priebehu operacie v percentach?
Miro
----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>
Sent: Saturday, December 14, 2002 7:02 AM
Subject: Re: Spusteni externiho exe z aplikace v Delphi
> 13.12.2002 Jiri Brothanek:
> > Opravuji svuj minuly mail (nesmyslne pouziti TStringList).
>
> > Problem mam uz tady :
>
> > procedure TForm1.Button1Click(Sender: TObject);
> > begin
> > DosCommand1.CommandLine := 'c:\my.bat';
> > DosCommand1.Execute;
> > end;
>
> > Vyvola vzdy OnError.
>
>
> A co ti k tomu mam rict, kdyz nevim, co mas v te davce ?
> Mas v ni prikazy i s cestou ?
> Pokud to spoustit ze sveho programu, jsi nastaveny nekde. A kdyz mas v
> davce prime spusteni neceho bez cesty...
>
> V havicce unity mas priklady.
> Zkus vyzkouset tohle:
>
> s := 'C:\My.BAT';
> DosComm.CurDir := ExtractFilePath(s);
> DosComm.CommandLine := s;
> DosComm.Execute;
>
> Cteni vystupu na obrazovku se provadi v udalosti DosComm.OnNewLine,
> takze by tam nemelo byt zadne presmerovani >neco.txt
>
> --
> Jan Fiala
> mailto:jan.fiala@iol.cz
>
Odpovedá: ing. Jan Fiala
14. 12. 2002 19:39
Neni nic jednodussiho nez to vyzkouset.
Co jsi cekal za odpoved ? Ja takovu aplikaci nemam, takze to
nevyzkousim
--
Jan Fiala
mailto:jan.fiala@iol.cz
14.12.2002 miro mrazik:
> Ahoj mam konzolovu aplikaciu, ktoru ked spustim tak sa mi zobrazi dosovske
> okno a v nom bezia percenta. Bolo by mozne pomocou tejto komponenty
> zachytiti aj vypisovanie priebehu operacie v percentach?